package Common;

import POJO.FilePathMes;
import org.apache.commons.io.FileUtils;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class RuleEngineUI {
    private JFrame frame;
    private JTextField tkNumberField;
    private JTextField modelField;
    private JButton startButton;
    private JButton cancelButton;
    private JLabel statusLabel;

    public static void main(String[] args) {
        // 确保在事件调度线程上创建和操作GUI组件
        SwingUtilities.invokeLater(() -> {
            RuleEngineUI ui = new RuleEngineUI();
            ui.initialize();
            ui.frame.setVisible(true);
        });
    }

    private void initialize() {
        // 创建主窗口
        frame = new JFrame("规则引擎筛单处理");
        frame.setSize(600, 600);
        frame.setResizable(false); // 固定窗口大小
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null); // 居中显示

        // 设置主面板
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(null); // 使用绝对布局
        frame.setContentPane(mainPanel);

        // 创建TK号标签
        JLabel tkNumberLabel = new JLabel("TK号:");
        tkNumberLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
        tkNumberLabel.setBounds(120, 150, 60, 30);
        mainPanel.add(tkNumberLabel);

        // 创建筛单模块标签
        JLabel model = new JLabel("模块:");
        model.setFont(new Font("微软雅黑", Font.PLAIN, 14));
        model.setBounds(120, 120, 60, 30);
        mainPanel.add(model);

        // 创建模块输入框
        modelField = new JTextField();
        modelField.setFont(new Font("微软雅黑", Font.PLAIN, 14));
        modelField.setBounds(220, 120, 200, 30);
        mainPanel.add(modelField);

        // 创建TK号输入框
        tkNumberField = new JTextField();
        tkNumberField.setFont(new Font("微软雅黑", Font.PLAIN, 14));
        tkNumberField.setBounds(220, 150, 200, 30);
        mainPanel.add(tkNumberField);

        // 创建开始执行按钮
        startButton = new JButton("开始执行");
        startButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
        startButton.setBounds(180, 250, 100, 40);
        startButton.setBackground(new Color(46, 139, 87)); // 绿色背景
        startButton.setForeground(Color.WHITE); // 白色文字
        mainPanel.add(startButton);

        // 创建取消执行按钮
        cancelButton = new JButton("取消执行");
        cancelButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
        cancelButton.setBounds(320, 250, 100, 40);
        cancelButton.setBackground(new Color(46, 139, 87)); // 红色背景
        cancelButton.setForeground(Color.WHITE); // 白色文字
        mainPanel.add(cancelButton);

        // 创建状态标签
        statusLabel = new JLabel("TK号绑定筛单事件");
        statusLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
        statusLabel.setForeground(new Color(100, 100, 100)); // 深绿色文字
        statusLabel.setBounds(250, 320, 100, 30);
        statusLabel.setHorizontalAlignment(SwingConstants.CENTER);
        mainPanel.add(statusLabel);

        // 添加按钮事件监听器
        startButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String tkNumber = tkNumberField.getText().trim();
                if (tkNumber.isEmpty()) {
                    JOptionPane.showMessageDialog(frame, "请输入TK号!", "提示", JOptionPane.WARNING_MESSAGE);
                    return;
                }
                String model = modelField.getText().trim();
                if (model.isEmpty()) {
                    JOptionPane.showMessageDialog(frame, "请输入需要筛单的模块!", "提示", JOptionPane.WARNING_MESSAGE);
                    return;
                }
                TKUtils.model = model;

                // 更新状态
                statusLabel.setText("处理中...");
                statusLabel.setForeground(Color.RED);

                // 禁用开始按钮，启用取消按钮
                startButton.setEnabled(false);
                cancelButton.setEnabled(true);



                // 模拟长时间处理（实际应用中应使用线程）
                new Thread(() -> {
                    try {
                        // 判断当前tk号是否是一组的
                        if(tkNumber.contains(",")){
                            String[] tkNumArr = tkNumber.split(",");
                            for (String s : tkNumArr) {
                                System.out.println(s);
                                handleCurrentTK(s);
                            }
                        }else{
                            handleCurrentTK(tkNumber);
                        }

                        // 模拟处理耗时
//                        Thread.sleep(3000);
                        // 在事件调度线程上更新UI
                        SwingUtilities.invokeLater(() -> {
                            statusLabel.setText("处理完成");
                            statusLabel.setForeground(new Color(0, 100, 0));
                            startButton.setEnabled(true);
                            cancelButton.setEnabled(false);
                            JOptionPane.showMessageDialog(frame, "处理完成!", "成功", JOptionPane.INFORMATION_MESSAGE);
                        });

                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }).start();
            }
        });

        cancelButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 更新状态
                statusLabel.setText("已取消");
                statusLabel.setForeground(Color.GRAY);

                // 启用开始按钮，禁用取消按钮
                startButton.setEnabled(true);
                cancelButton.setEnabled(false);

                // 这里可以添加取消处理的逻辑
            }
        });

        // 初始状态下取消按钮不可用
        cancelButton.setEnabled(true);
    }

    public void handleCurrentTK(String tkNumber) throws Exception {
        TKUtils.TK_Number = tkNumber;
        FilePathMes.JSON_PATH = FilePathMes.JSON_PATH_ORI + "\\" + tkNumber;
        FilePathMes.XML_PATH = FilePathMes.JSON_PATH_ORI + "\\" + tkNumber;
        // 确保目标文件存在
        File XML_Directory = new File(FilePathMes.XML_PATH);
        if(XML_Directory.exists())
            FileUtils.cleanDirectory(XML_Directory);
        else
            Files.createDirectory(Paths.get(FilePathMes.XML_PATH));
        // 1. JX解密并且保存到对应的目录
        JXFileUtils.getJXConnentChar();
        // 2. 读取解密之后的内容，并且执行后续操作
        XMLUtils.readJSON();
    }
}